package com.mallcai.bigdata.ladon.service.report.node;

import org.apache.commons.lang3.StringUtils;

import java.util.List;
import java.util.regex.Matcher;

import static com.mallcai.bigdata.ladon.service.report.node.ReportSqlNodeUtils.IF_PATTERN;

/**
 * @author feixy
 * @version 1.0
 * @date 2019-08-03 18:29
 */
public class ReportSqlNodeFactory {

    /**
     * 将sql转化为Node节点
     * @param sql
     * @return
     */
    public static ReportSqlNode create(String sql){
        if (StringUtils.isBlank(sql)){
            return NullReportSqlNode.getInstance();
        }
        sql = sql.trim();
        if (!fastTest(sql)){
            return new StaticReportSqlNode(sql);
        }
        List<String> sqlNodes = ReportSqlNodeUtils.splitByIfTag(sql);
        if (sqlNodes.size() > 1){
            return new CompositeReportSqlNode(sqlNodes);
        }
        return new DynamicReportSqlNode(sqlNodes.get(0));
    }

    /**
     * 快速测试一下,是否包含if标签
     * @param sql
     * @return
     */
    private static boolean fastTest(String sql){
        Matcher matcher = IF_PATTERN.matcher(sql);
        if (matcher.find()){
            return true;
        }
        return false;
    }

}
